package cn.pink.common.id;

/**
 * 主要ID和次要ID生成的一个KEY(满足以下条件的应用即可)  {@code 1<=majorID<=0x7F},{@code 1<=minorID<=0xFFFF}
 * @author Pink
 */
public interface AreaID {
  /** 主要最小 */
  byte MAJOR_MIN = 1;
  /** 次要最大 */
  int MINOR_MAX = 0xFFFF;
  /** 次要最小 */
  int MINOR_MIN = 1;

  int areaID();

  static int areaID(byte majorID, int minorID) {
    return ((majorID & 0XFF) << 16) | ((minorID & 0xFFFF));
  }

  static int minorID(AreaID key) {
    return minorID(key.areaID());
  }

  static byte majorID(AreaID key) {
    return majorID(key.areaID());
  }

  static int minorID(int key) {
    return key & 0X00FFFF;
  }

  static byte majorID(int key) {
    return (byte) (key >> 16);
  }
}
